# pip install pillow fpdf
# D:\\GongZuoKongJian\\air-web\\src\\assets\\images\\lack

import os
from PIL import Image
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from reportlab.lib.colors import red
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# 设置图片目录
image_dir = 'D:\\360安全浏览器下载\\新建文件夹'

# 获取目录中的所有图片文件
image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]

# 根据图片的创建时间进行排序
image_files.sort(key = lambda x: os.path.getctime(os.path.join(image_dir, x)))

# 注册宋体字体
font_path = 'C:/Windows/Fonts/simsun.ttc'  # 替换为实际的宋体字体文件路径
pdfmetrics.registerFont(TTFont('SimSun', font_path))

# 创建 PDF 文件
output_pdf = "output_with_watermark.pdf"
c = canvas.Canvas(output_pdf, pagesize = A4)

# A4 页面尺寸（单位：点，1 mm = 2.83465 点）
A4_WIDTH, A4_HEIGHT = A4

# 水印参数
watermark_flag = False
watermark_text = "水印内容"
font_size = 14
watermark_color = red
watermark_alpha = 0.5
angle = 45  # 水印旋转角度
spacing = 60  # 水印之间的间距

# 计算水印文字的宽度和高度
text_width = c.stringWidth(watermark_text, 'SimSun', font_size)
text_height = font_size

# 遍历排序后的图片文件，并将它们添加到 PDF 中
image_index = 0
for image_file in image_files:
  image_path = os.path.join(image_dir, image_file)
  img = Image.open(image_path)

  # 如果图片有透明通道（RGBA 模式），转换为不透明背景（RGB 模式）
  # if img.mode in ('RGBA', 'LA'):
  #   background = Image.new('RGB', img.size, (255, 255, 255))  # 创建白色背景
  #   background.paste(img, mask = img.split()[-1])  # 将透明图片粘贴到背景上
  #   img = background

  # 获取图片的原始宽高
  img_width, img_height = img.size

  # 计算图片的宽高比例
  aspect_ratio = img_width / img_height

  # 根据图片比例调整其在 A4 页面中的显示尺寸
  # if aspect_ratio > 1:  # 图片宽度大于高度
  #   display_width = A4_WIDTH  # 宽度占满 A4 宽度
  #   display_height = A4_WIDTH / aspect_ratio  # 高度按比例缩放
  # else:  # 图片高度大于宽度
  #   display_height = A4_HEIGHT  # 高度占满 A4 高度
  #   display_width = A4_HEIGHT * aspect_ratio  # 宽度按比例缩放
  display_width = A4_WIDTH  # 宽度占满 A4 宽度
  display_height = display_width / aspect_ratio  # 高度占满 A4 高度

  # 计算图片在页面中的偏移量（居中显示）
  # x_offset = (A4_WIDTH - display_width) / 2
  # y_offset = (A4_HEIGHT - display_height) / 2
  x_offset = 0
  y_offset = 0

  # 将图片添加到 PDF 页面
  c.drawImage(ImageReader(img), x_offset, y_offset, width = display_width, height = display_height)

  if watermark_flag:
    # 添加水印
    c.setFont('SimSun', font_size)  # 使用注册的宋体字体
    c.setFillColor(watermark_color)  # 设置文字颜色为红色
    c.setFillAlpha(watermark_alpha)  # 设置透明度（0-1，0 为完全透明，1 为不透明）

    # 计算水印的分布范围
    # 从 (0, 0) 开始，覆盖整个页面
    start_x = 0
    start_y = 0
    end_x = A4_WIDTH + spacing  # 确保覆盖到页面右侧
    end_y = A4_HEIGHT + spacing  # 确保覆盖到页面顶部

    # 循环绘制水印
    for x in range(int(start_x), int(end_x), spacing):
      for y in range(int(start_y), int(end_y), spacing):
        # 保存当前画布状态
        c.saveState()

        # 平移和旋转画布
        c.translate(x, y)
        c.rotate(angle)

        # 绘制水印文字
        c.drawString(0, 0, watermark_text)

        # 恢复画布状态
        c.restoreState()

  # 结束当前页面
  c.showPage()
  print(f"当前图片索引：{image_index}")
  image_index = image_index + 1

# 保存 PDF 文件
c.save()

print(f"PDF 已生成：{output_pdf}")
